iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
自我挑戰組

30天從0開始的NCPC之旅系列 第 11

[Day 11] UVA10268 & UVA10931

  • 分享至 

  • xImage
  •  

UVA10268

點我進UVA10268

解題思路

第一行為X,第二行為方程式
例如:
7
1 -1
==> 先對X-1做微分 已經是1

2
1 1 1
==> X^2+x+1做微分 ,得到2X+1
==>2帶入即可得到5

簡單來說即是按照微分的方法去求解即可

#include <iostream>
#include <string>
#include <sstream>
#include <cmath>

using namespace std;

int main(){
	int a;
	string b;
	stringstream ss;
	
	while(cin>>a){
		int count=0,ex[1000]={0},tmp=0,sum=0,count2=0;
		ss.clear();
		ss.str("");
		cin.ignore();
		getline(cin,b);
		ss<<b;
		
		while(ss>>tmp){
			ex[count]=tmp;
			count++;
		}
		for(int i=count-1;i>0;i--){
			sum+=i*ex[count2]*pow(a,i-1);
			count2++;
		}
		cout<<sum<<endl;
		
	}
	

}

UVA10931

點我看UVA10931
題目很簡短,就是輸入一個數字例如21,轉成二進位制是10101,然後算Parity的個數有幾個,像是這個例子就是輸出The parity of 10101 is 3 (mod 2).

可以不斷input直到input為零則停止。

C++ Vector的用法與簡介可以參考延伸閱讀:https://mropengate.blogspot.com/2015/07/cc-vector-stl.html

解題思路:

首先會想到要把input%2去判斷是餘1還是餘0,如果是餘1就要Parity+1,並將input%2的結果存進vector裡

https://ithelp.ithome.com.tw/upload/images/20220923/201524948iG0ltzqZV.jpg

#include<bits/stdc++.h>
using namespace std;

int main()
{
vector <int> m;//用來存放轉成二進位的數字 
int n;//這是input 
while(cin>>n)
{  
 m.clear();//要記得清空陣列 
 int e=0;//計算Parity 
 if(n==0)break;
cout<<"The parity of ";
 while(n>0)
 {
 if(n%2==1)
  {
  m.push_back(n%2);//將餘1存進陣列 
  e++;//如果有餘1就要Parity+1 
  }
  else 
  {
   m.push_back(n%2);//將餘0存進陣列 
  }
 n/=2;
 }
 reverse(m.begin(), m.end());
  for (int i = 0; i < m.size(); i++) {
       cout << m[i];
    }
 cout<<" is "<<e;
 
 cout<<" (mod 2)."<<endl;
}
return 0;
}

上一篇
[Day 10] UVA10093 & UVA11349 & UVA10062
下一篇
[Day 12] UVA11417 & UVA11461
系列文
30天從0開始的NCPC之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言